package com.lightChat.controller;

import com.lightChat.entity.ResultData;
import com.lightChat.entity.Users;
import com.lightChat.service.UsersService;
import com.lightChat.util.Base64DecodeMultipartFile;
import com.lightChat.util.FileUtils;
import com.lightChat.util.QRCodeUtils;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.UUID;

/**
 * @author sxt
 * @create 2019-11-06 21:55
 */
@RestController
public class UsersController {

    @Autowired
    private UsersService usersService;

    @GetMapping(value = "/getAllUsers")
    public ResultData getAllUsers(){
        List<Users> users = usersService.queryAllUsers();
        return new ResultData("200", "测试",users);
    }

    /**
     * 用户注册
     * @param username
     * @param password
     * @return
     */
    @PostMapping(value = "/user",params = {"username","password"})
    public ResultData register(String username,String password){


        //判断username是否已经被注册
        Users checkUser = usersService.queryUserByUsername(username);
        if (checkUser != null){
            return new ResultData("500", "用户名已被注册");
        }



        Users users = new Users();
        //设置接收到的值
        users.setUsername(username);
        users.setPassword(password);

        //设置用户id
        users.setId(UUID.randomUUID().toString().replaceAll("-", ""));

        //设置默认头像
        users.setFaceImage("/image/default-face-image.png");
        users.setFaceImageBig("/image/default-face-image.png");


        //设置二维码,地址为绝对地址
        String qrCodePath = "D:/ProcessingProjects/trainingToIot1803/lightChat/src/main" +
                "/resources/static/image/qrcode"+"/"+username+"-qrcode.png";
        QRCodeUtils.createQRCode(qrCodePath, "Qrcode:" +username );
        users.setQrcode("/image/qrcode/"+username+"-qrcode.png");

        usersService.register(users);


        System.out.println(users);


        return new ResultData("200", "success");
    }


    /**
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    @GetMapping("/user/{username}")
    public ResultData login(@PathVariable("username")String username, String password){

        Users users = new Users();

        //设置初始值
        users.setUsername(username);
        users.setPassword(password);

        Users resultUser = usersService.login(users);

        //如果不为空，登录成功
        if(resultUser != null){
            return new ResultData("200", "success", resultUser);
        }else {
            //如果为空，登录失败
            return new ResultData("500", "fail");
        }
    }


    /**
     * 根据用户id修改昵称
     * @param id 用户id
     * @param nickname 想要设置的昵称
     * @return
     */
    @PutMapping("/user/{id}/nickname")
    public ResultData updateNickname(@PathVariable("id") String id, String nickname) {

        //请把业务代码补全

        return null;
    }

    /**
     * 根据用户id和旧密码去修改密码
     * @param id 用户id
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return
     */
    @PutMapping("/user/{id}/password")
    public ResultData updatePasswordById(@PathVariable("id") String id, String oldPassword, String newPassword) {

        //请把业务代码补全

        return null;
    }

    /**
     * 上传base64的图片字符串并更新 头像
     * @param id
     * @param base64FaceImage
     * @return
     */
    @PutMapping("/user/{id}/faceImage")
    public ResultData uploadFaceImage(@PathVariable("id") String id, String base64FaceImage){
        String path = "D:/ProcessingProjects/trainingToIot1803/lightChat/src/main/resources/" +
                "static/image/faceImage"+"/"+id+"-faceImage.png";
        try {
            FileUtils.base64ToFile(path,base64FaceImage);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //还需要把头像信息更新到数据库中，请参照register（）完成

        return null;
    }

    /**
     * 搜索好友
     * @param myUsername 我的username
     * @param friendUsername  朋友的username
     * @return
     */
    @GetMapping("/user/{friendUsername}")
    public ResultData searchUserById(@PathVariable("friendUsername") String friendUsername,String myUsername){

        // 0. 如果 friendUsername 与 myUsername 相同，则不允许添加
        if(friendUsername.equals(myUsername)){
            return new ResultData("500", "不能添加自己为好友。");
        }
        // 1. 如果好友不存在，返回提示信息
        Users checkFriend = usersService.queryUserByUsername(friendUsername);
        if (checkFriend == null){
            return new ResultData("500", "用户不存在");
        }
        // 2. 如果已经是我的好友，则不允许添加。提示：去my_friends表查询，如果有记录则说明已经是好友
        // 请小组内完成


        // 3. 如果已经发送过好友请求（查询friends_request表已经有对应记录），则不允许再添加了




        // 4. 如果满足上述要求，则返回对应的用户信息
        return new ResultData("200", "success",checkFriend);
    }

    /**
     * 发送好友请求
     * @param myId 我的id
     * @param friendId 朋友的id ，从searchUserById的结果拿到friendId
     * @return
     */
    @PostMapping("/user/{myId}/addFriend")
    public ResultData sendFriendRequest(@PathVariable("myId")String myId,String friendId){
        //把对应记录添加到friend_request里面去


        return null;
    }


    /**
     * 获取所有好友请求
     * @param id 自己的id
     * @return
     */
    @GetMapping("/user/{id}/friendRequest")
    public ResultData getAllFriendRequest(@PathVariable("id")String id){
        //去friends_request表查询对应 accept_user_id为自己id的记录，并且返回。


        return null;

    }

    /**
     * 通过或者忽略好友球球
     * @param myId 我的id
     * @param friendId 朋友的id
     * @param operate 操作 1：通过  0：不通过
     * @return
     */
    @PostMapping("user/{myId}/operateRequest")
    public ResultData operateRequestById(@PathVariable("myId")String myId,String friendId,String operate){

        //判断operate的值
        if (operate.equals("1")){
            //通过
            //0. 删除frends_request里面的记录
            //1. 去my_friend添加两条记录


            return null;
        }else if (operate.equals("0")){
            //忽略
            //0. 删除frends_request里面的记录

            return null;
        }else {
            return new ResultData("500", "operate参数有错");
        }

    }




}
